#ifndef ALIYUN_ROA_ACS_REQUEST_H_
#define ALIYUN_ROA_ACS_REQUEST_H_

#include "core/acs_request.h"

namespace aliyun {

class RoaAcsRequest : public AcsRequest {
public:
  RoaAcsRequest(const string& product, const string& version, const string& action);
  virtual ~RoaAcsRequest();

  virtual string ComposeUrl(ISigner *i_signer, const Credential* credential, const string& domain);

  virtual void SetVersion(const string& version);

  const std::map<string, string>& GetPathParameters(void) const;
  void PutPathParameter(const string& name, const string& value);

  const std::map<string, string>& GetDomainParameters(void) const;
  void PutDomainParameter(const string& name, const string& value);

  const string& GetUriPattern(void) const;
  void SetUriPattern(const string& pattern);

protected:
  string uri_pattern_;

private:
  string ReplaceOccupiedParameters(void);
  string BuildCanonicalHeaders(void);
  string BuildQueryString(const string& uri);
private:
  std::map<string, string> path_parameters_;
  std::map<string, string> domain_parameters_;
};

} // namespace aliyun {

#endif // #ifndef ALIYUN_ROA_ACS_REQUEST_H_

// end of file
